cmake_minimum_required(VERSION 3.8)
project(berkeleydb C CXX)

option(INSTALL_HEADERS "Install header files" ON)

add_definitions(
	-DWIN32
	-D_WINDOWS
	-D_CRT_SECURE_NO_DEPRECATE
	-D_CRT_NONSTDC_NO_DEPRECATE
	-D_LIB
	-DUNICODE
	-D_UNICODE
)

if (BUILD_SHARED_LIBS)
	add_definitions(
		-DDB_CREATE_DLL
		-D_USRDLL
	)
else()
	add_definitions(
		-D_LIB
	)
endif()

add_library(libdb48 
	btree/bt_compact.c
	btree/bt_compare.c
	btree/bt_compress.c
	btree/bt_conv.c
	btree/bt_curadj.c
	btree/bt_cursor.c
	btree/bt_delete.c
	btree/bt_method.c
	btree/bt_open.c
	btree/bt_put.c
	btree/bt_rec.c
	btree/bt_reclaim.c
	btree/bt_recno.c
	btree/bt_rsearch.c
	btree/bt_search.c
	btree/bt_split.c
	btree/bt_stat.c
	btree/bt_upgrade.c
	btree/bt_verify.c
	btree/btree_auto.c
	db/crdel_auto.c
	db/crdel_rec.c
	common/crypto_stub.c
	cxx/cxx_db.cpp
	cxx/cxx_dbc.cpp
	cxx/cxx_dbt.cpp
	cxx/cxx_env.cpp
	cxx/cxx_except.cpp
	cxx/cxx_lock.cpp
	cxx/cxx_logc.cpp
	cxx/cxx_mpool.cpp
	cxx/cxx_multi.cpp
	cxx/cxx_seq.cpp
	cxx/cxx_txn.cpp
	db/db.c
	db/db_am.c
	db/db_auto.c
	common/db_byteorder.c
	db/db_cam.c
	db/db_cds.c
	db/db_conv.c
	db/db_dispatch.c
	db/db_dup.c
	common/db_err.c
	common/db_getlong.c
	common/db_idspace.c
	common/db_compint.c
	db/db_iface.c
	db/db_join.c
	common/db_log2.c
	db/db_meta.c
	db/db_method.c
	db/db_open.c
	db/db_overflow.c
	db/db_ovfl_vrfy.c
	db/db_pr.c
	db/db_rec.c
	db/db_reclaim.c
	db/db_remove.c
	db/db_rename.c
	db/db_ret.c
	db/db_setid.c
	db/db_setlsn.c
	common/db_shash.c
	db/db_sort_multiple.c
	db/db_stati.c
	db/db_truncate.c
	db/db_upg.c
	db/db_upg_opd.c
	db/db_vrfy.c
	db/db_vrfyutil.c
	db/partition.c
	dbm/dbm.c
	dbreg/dbreg.c
	dbreg/dbreg_auto.c
	dbreg/dbreg_rec.c
	dbreg/dbreg_stat.c
	dbreg/dbreg_util.c
	common/dbt.c
	env/env_alloc.c
	env/env_config.c
	env/env_failchk.c
	env/env_file.c
	env/env_globals.c
	env/env_method.c
	env/env_name.c
	env/env_open.c
	env/env_recover.c
	env/env_region.c
	env/env_register.c
	env/env_sig.c
	env/env_stat.c
	fileops/fileops_auto.c
	fileops/fop_basic.c
	fileops/fop_rec.c
	fileops/fop_util.c
	hash/hash.c
	hash/hash_auto.c
	hash/hash_conv.c
	hash/hash_dup.c
	hash/hash_func.c
	hash/hash_meta.c
	hash/hash_method.c
	hash/hash_open.c
	hash/hash_page.c
	hash/hash_rec.c
	hash/hash_reclaim.c
	hash/hash_stat.c
	hash/hash_upgrade.c
	hash/hash_verify.c
	hmac/hmac.c
	hsearch/hsearch.c
	build_windows/libdb.def
	lock/lock.c
	lock/lock_deadlock.c
	lock/lock_failchk.c
	lock/lock_id.c
	lock/lock_list.c
	lock/lock_method.c
	lock/lock_region.c
	lock/lock_stat.c
	lock/lock_timer.c
	lock/lock_util.c
	log/log.c
	log/log_archive.c
	log/log_compare.c
	log/log_debug.c
	log/log_get.c
	log/log_method.c
	log/log_put.c
	log/log_stat.c
	common/mkpath.c
	mp/mp_alloc.c
	mp/mp_bh.c
	mp/mp_fget.c
	mp/mp_fmethod.c
	mp/mp_fopen.c
	mp/mp_fput.c
	mp/mp_fset.c
	mp/mp_method.c
	mp/mp_mvcc.c
	mp/mp_region.c
	mp/mp_register.c
	mp/mp_resize.c
	mp/mp_stat.c
	mp/mp_sync.c
	mp/mp_trickle.c
	mutex/mut_alloc.c
	mutex/mut_failchk.c
	mutex/mut_method.c
	mutex/mut_region.c
	mutex/mut_stat.c
	mutex/mut_win32.c
	common/openflags.c
	os/os_abort.c
	os/os_addrinfo.c
	os_windows/os_abs.c
	os/os_alloc.c
	os_windows/os_clock.c
	os_windows/os_config.c
	os_windows/os_cpu.c
	os/os_ctime.c
	os_windows/os_dir.c
	os_windows/os_errno.c
	os_windows/os_fid.c
	os_windows/os_flock.c
	os_windows/os_fsync.c
	os_windows/os_getenv.c
	os_windows/os_handle.c
	os_windows/os_map.c
	os_windows/os_mkdir.c
	os_windows/os_open.c
	os/os_pid.c
	os_windows/os_rename.c
	os/os_root.c
	os/os_rpath.c
	os_windows/os_rw.c
	os_windows/os_seek.c
	os/os_stack.c
	os_windows/os_stat.c
	os/os_tmpdir.c
	os_windows/os_truncate.c
	os/os_uid.c
	os_windows/os_unlink.c
	os_windows/os_yield.c
	qam/qam.c
	qam/qam_auto.c
	qam/qam_conv.c
	qam/qam_files.c
	qam/qam_method.c
	qam/qam_open.c
	qam/qam_rec.c
	qam/qam_stat.c
	qam/qam_upgrade.c
	qam/qam_verify.c
	rep/rep_auto.c
	rep/rep_backup.c
	rep/rep_elect.c
	rep/rep_lease.c
	rep/rep_log.c
	rep/rep_method.c
	rep/rep_record.c
	rep/rep_region.c
	rep/rep_stat.c
	rep/rep_util.c
	rep/rep_verify.c
	repmgr/repmgr_auto.c
	repmgr/repmgr_elect.c
	repmgr/repmgr_method.c
	repmgr/repmgr_msg.c
	repmgr/repmgr_net.c
	repmgr/repmgr_queue.c
	repmgr/repmgr_sel.c
	repmgr/repmgr_stat.c
	repmgr/repmgr_util.c
	repmgr/repmgr_windows.c
	sequence/seq_stat.c
	sequence/sequence.c
	hmac/sha1.c
	clib/strsep.c
	txn/txn.c
	txn/txn_auto.c
	txn/txn_chkpt.c
	txn/txn_failchk.c
	txn/txn_method.c
	txn/txn_rec.c
	txn/txn_recover.c
	txn/txn_region.c
	txn/txn_stat.c
	txn/txn_util.c
	common/os_method.c
	common/util_cache.c
	common/util_log.c
	common/util_sig.c
	common/zerofill.c
)

include_directories(${CMAKE_CURRENT_SOURCE_DIR} build_windows dbinc)

target_link_libraries(libdb48 PUBLIC ws2_32.lib)

install(TARGETS libdb48
    RUNTIME DESTINATION bin
    ARCHIVE DESTINATION lib
    LIBRARY DESTINATION lib
)

if(INSTALL_HEADERS)
	file(GLOB HEADERS build_windows/*.h)
	install(FILES ${HEADERS} DESTINATION include)
endif()